package br.com.ianalise.outros;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Validacoes {

	public static boolean isDate(String dateStr) throws java.text.ParseException {
		DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		Calendar cal = new GregorianCalendar();

		// gerando o calendar
		cal.setTime(df.parse(dateStr));

		// separando os dados da string para comparacao e validacao
		String[] data = dateStr.split("/");
		String dia = data[0];
		String mes = data[1];
		String ano = data[2];

		// testando se hah discrepancia entre a data que foi
		// inserida no caledar e a data que foi passada como
		// string. se houver diferenca, a data passada era
		// invalida
		if ((new Integer(dia)).intValue() != (new Integer(
				cal.get(Calendar.DAY_OF_MONTH))).intValue()) {
			// dia nao casou
			return (false);
		} else if ((new Integer(mes)).intValue() != (new Integer(
				cal.get(Calendar.MONTH) + 1)).intValue()) {
			// mes nao casou
			return (false);
		} else if ((new Integer(ano)).intValue() != (new Integer(
				cal.get(Calendar.YEAR))).intValue()) {
			// ano nao casou
			return (false);
		}

		return (true);
	}

	private static String calcDigVerif(String num) {
		Integer primDig, segDig;
		int soma = 0, peso = 10;
		for (int i = 0; i < num.length(); i++)
			soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;

		if (soma % 11 == 0 | soma % 11 == 1)
			primDig = new Integer(0);
		else
			primDig = new Integer(11 - (soma % 11));

		soma = 0;
		peso = 11;
		for (int i = 0; i < num.length(); i++)
			soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;

		soma += primDig.intValue() * 2;
		if (soma % 11 == 0 | soma % 11 == 1)
			segDig = new Integer(0);
		else
			segDig = new Integer(11 - (soma % 11));

		return primDig.toString() + segDig.toString();
	}

	public static boolean isCPF(String cpf) {
		if (cpf.length() != 11)
			return false;

		String numDig = cpf.substring(0, 9);
		return calcDigVerif(numDig).equals(cpf.substring(9, 11));
	}
	
	public static boolean isEmail(String email) {

		// Set the email pattern string
		Pattern p = Pattern.compile(".+@.+\\.[a-z]+");

		// Match the given string with the pattern
		Matcher m = p.matcher(email);

		// check whether match is found
		boolean matchFound = m.matches();

		if (matchFound)
			//Válido
			return true;
		else
			//Inválido
			return false;
	}
}